package com.white.framework.flow;

import com.white.framework.flow.enums.FlowOptionEnum;

/**
 * 顶层流程节点执行接口
 * @param <D> 额外业务参数类型
 * @param <R> 执行结果返回值类型
 * @author white
 * @create 2020-11-30 16:54
 */
public interface FlowNodeJob<D,R> {

    /**
     * 全自动执行
     * 完整的执行这个Job
     * 他包含了这个Job的所有生命周期的处理
     *
     * @param businessNo 业务单号
     * @param businessDTO 执行这个Job所需的额外参数
     */
    R fullyAutomaticRun(String businessNo, D businessDTO);

    /**
     * 半自动执行
     *
     * 他会跳过执行器阶段,直接执行结果
     * 因为执行器阶段已由人工完成
     *
     * @param option 操作结果
     * @param businessNo 业务单号
     * @param operatorId 操作员ID
     * @param operatorName 操作员名称
     * @param remarks 备注
     */
    R semiAutomaticRun(FlowOptionEnum option, String businessNo, String operatorId, String operatorName, String remarks);
}
